package com.adee.netty.tcp;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class MyClientHandler extends SimpleChannelInboundHandler<ByteBuf> {
    private int cnt;
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        String s = "天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，" +
                "吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，" +
                "吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，" +
                "吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅 天冷了，吃火锅";
        for(int i = 0; i < 1; i++) {
            ByteBuf buf = Unpooled.copiedBuffer(s, Charset.forName("utf-8"));
            // 客户端发送10次数据，服务端只接收1次，有tcp粘包拆包问题，解决办法是自定义协议包 MessageProtocol
            ctx.channel().writeAndFlush(buf);
        }
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
        byte[] bytes = new byte[msg.readableBytes()];
        msg.readBytes(bytes);
        String s = new String(bytes, StandardCharsets.UTF_8);
        System.out.println("客户端接收到消息：" + s);
        System.out.println("客户端接收消息数量：" + (++cnt));
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}
